(function ($) {

	var leaf_id = "0";
	
// Напоминание о выборе строки
	function selRowPlease() {
		app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите строку в таблице.", 'app-icon-stop32');
	}
	
    function CrossStock(area_id, caller) {
        var vdiv = area_id+'Tab';
		var area = $('#'+area_id);

		area.html('<div id="'+vdiv+'Pager"></div><table id="'+vdiv+'"></table>');
        
		var pager_id = '#' + vdiv + 'Pager';
        var pager = $(pager_id);
		
		var edit_div = 'div#editmod' + vdiv;

        var gritab;
        var col_order = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ];
        var col_names = ['Статис', 'ID', 'Дата', '№ накладной', '№ п/п', 'ID материала', 'Шифр', 'Описание',
						 'К-во', 'Остаток', 'ID Ед.', 'Ед.', 'Цена', 'Списание', 'Примечание'];
        var col_model = [
		    { name: 'status', index: 'status', hidden: true, width: 1, fixed: true, 
				sortable: false, search: false, editable: true
			},
		    { name: 'id', index: 'sto_id', hidden: false, width: 60, editable: false, 
				formoptions: { label: '<div class="jqg-form-label">Идентификатор</div>'}
			},
			{ name: 'sto_inv_date', index:'sto_inv_date', hidden: false, width:80, editable: false,
				formoptions: { label: '<div class="jqg-form-label">Дата накладной</div>'}
			},         
		    { name: 'sto_inv_num', index: 'sto_inv_num', hidden: false, width: 100, editable: false,
				formoptions: { label: '<div class="jqg-form-label">Номер накладной</div>'}
		    },
		    { name: 'sto_inv_pos', index: 'sto_inv_pos', hidden: false, width: 40, 
				sortable: false, search: false, editable: false,
				formoptions: { label: '<div class="jqg-form-label">№ позиции</div>'}
		    },
		    { name: 'sto_uni_id', index: 'sto_uni_id', hidden: true, width: 1, 
				sortable: false, search: false, editable: false,
		    },
		    { name: 'uni_name', index: 'uni_name', hidden: false, width: 65, editable: false,
				formoptions: { label: '<div class="jqg-form-label">Шифр материала</div>'}
		    },
		    { name: 'uni_full', index: 'uni_full', hidden: false, width: 300, sortable: false, editable: false,
				formoptions: { label: '<div class="jqg-form-label">Описание</div>'}
		    },
		    { name: 'sto_number', index: 'sto_number', hidden: false, width: 70, align:'right',
				sortable: false, search: false, editable: false,
				formatter:'number', formatoptions:{decimalSeparator:'.',decimalPlaces:2,thousandsSeparator:' '},
				formoptions: { label: '<div class="jqg-form-label">Количество</div>'}
		    },
		    { name: 'sto_remain', index: 'sto_remain', hidden: false, width: 70,  align:'right',
				search: false, editable: false,
				formatter:'number', formatoptions:{decimalSeparator:'.',decimalPlaces:2,thousandsSeparator:' '},
				formoptions: { label: '<div class="jqg-form-label">Остаток</div>'}
		    },
		    { name: 'sto_metric', index: 'sto_metric', hidden: true, width: 1, 
				sortable: false, search: false, editable: false
		    },
		    { name: 'met_name', index: 'met_name', hidden: false, width: 30, 
				sortable: false, search: false, editable: false,
				formoptions: { label: '<div class="jqg-form-label">Метрика</div>'}
		    },
		    { name: 'sto_price', index: 'sto_price', hidden: false, width: 80, align:'right', 
				sortable: false, search: false, editable: false,
				formatter:'number', formatoptions:{decimalSeparator:'.',decimalPlaces:2,thousandsSeparator:' '},
				formoptions: { label: '<div class="jqg-form-label">Цена</div>'}
		    },
			{ name: 'sto_retire_date', index:'sto_retire_date', hidden: false, width:80, editable: false,
				formoptions: { label: '<div class="jqg-form-label">Дата списания</div>'}
			},         
		    { name: 'sto_comment', index: 'sto_comment', hidden: false, width: 150, 
				sortable: false, search: false, editable: false,
				formoptions: { label: '<div class="jqg-form-label">Примечание</div>'}
		    }
        ];

        var jqgo = {
            url: 'index.php',
            editurl: 'index.php',
            datatype: 'json',
            postData: { q: 'stock/crossindex' },
            emptyrecords: true,
            autowidth: false,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            multiselect: true,
            multiselectWidth: 25,
            multiboxonly: true,
            mtype: 'POST',
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 50,
            rowList: [50, 200, 1000],
            loadui: 'disable',
            toolbar: [false, 'top'],
			toppager: false,
            filterbar: false,
            shrinkToFit: false,
            height: $('#'+area_id).innerHeight() - 77,
            width: $('#'+area_id).innerWidth() - 2,
            sortname: 'sto_id',
            sortorder: 'desc',
            sortable: true,
            caption: '',
            loadError: function () {
                alert("Ошибка загрузки даных");
            },
            loadComplete: function (data) {
                switch( data.userdata.errcode ) {
                    case 0:
                        break;
                    case 99:
                        app.alert('AlertDlg', 'Ошибка', data.userdata.errmess, 'app-icon-stop32', caller.Close );
                        break;
                    default:
                        app.alert('AlertDlg', 'Ошибка', data.userdata.errmess, 'app-icon-stop32' );
                        break;
                }
				var row_id, status;
				var stats = gritab.getCol( 'status', true );
				for( var i=0; i<stats.length; i++ ) {
					row_id = stats[i].id;
					status = stats[i].value;
					if( (status & 1 ) == 1 ) {
						gritab.jqGrid('setCell',row_id,'id','','ui-state-error');
					}
				}
            },
			beforeRequest: function() {
				$('#' + vdiv).jqGrid('setGridParam',{postData:{'leaf_id':leaf_id} });
			}
        };

// Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

// Навигатор - создаем панель инструментов
        gritab.jqGrid('navGrid', pager_id, {
				add:false,del:false,edit:false,view:false,search:false,refresh:false });
        
// Пользовательский навигатор - просмотр
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Просмотр',
            title: 'Показать в виде формы',
            buttonicon: 'ui-icon-document',
            onClickButton: function() { 
				var rowlist = gritab.getGridParam('selarrrow');
				if( rowlist.length == 0 ) { selRowPlease(); return; }
				if( rowlist.length > 1 ) {
					app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите только одну строку в таблице.", 'app-icon-stop32');
					return;
				}
				gritab.jqGrid('viewGridRow', rowlist[0], {
					width: 400,
					resize: true,
                    modal: true,
                    jqModal: true,
					zIndex: app.ui_dialog_min_z_index+1,
                    closeOnEscape: true,
                    viewPagerButtons: false,
					labelswidth: '30%',
					beforeShowForm: function(fm) { 
						$(fm).find("table:first td").css({'white-space':'normal','vertical-align':'top'});
						$('div#viewmod' + vdiv).shadow(); 
					}
				});
			}
        });
// Пользовательский навигатор - отмена списания
		gritab.jqGrid('navButtonAdd',pager_id,{
			caption: 'Возобновить',
			title: 'Отменить списание отмеченных позиции',
			buttonicon: 'ui-icon-arrowthickstop-1-n',
			onClickButton: function() {
				var rowarr = gritab.getGridParam('selarrrow');
				if( rowarr.length == 0 ) { selRowPlease(); return; }
				app.confirm('AlertDlg', 'Требуется подтверждение операции', 
					"Выполнить отмену списания всех отмеченных позиций ?", 'app-icon-quest32', UnRetireStockList );
				function UnRetireStockList() {
					var prm = { q: 'stock/unretire', sto_ids: rowarr.toString() };
					$.post('index.php', prm, function (rsp, textStatus) {
						if( typeof rsp != 'object' ) rsp = $.parseJSON(rsp);
						if (rsp.errcode) app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
						gritab.trigger("reloadGrid");
					}, 'json');
				}
			}
		});    
		
// Пользовательский навигатор - обновить
		gritab.jqGrid('navButtonAdd',pager_id,{
			caption: 'Обновить',
			title: 'Обновить таблицу',
			buttonicon: 'ui-icon-refresh',
			onClickButton: function() { 	gritab.trigger("reloadGrid"); }
		});    
        
// Делаем ширину панели кнопок максимальной
		$('td#'+area_id+'TabPager_center').width(2);
		
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

// Прикрепить календарь к ячейке поиска
		BindCalendar( $("#gview_"+vdiv+" tr.ui-search-toolbar"), $("#gview_" + vdiv + " #gs_sto_inv_date") );
		BindCalendar( $("#gview_"+vdiv+" tr.ui-search-toolbar"), $("#gview_" + vdiv + " #gs_sto_retire_date") );
		
        function BindCalendar(fm, el) {
            $(el).datepicker({
				onClose: function(dt, inst) {				
					if( $(fm).hasClass('ui-search-toolbar') && dt != '' ) gritab[0].triggerToolbar();
				},
                dateFormat: "dd.mm.yy",
                showOn: "button",
                buttonImage: "img/calendar2.png",
                buttonImageOnly: true,
                buttonText: "Календарь",
                changeMonth: true,
                changeYear: true
            });

            fm.find(".ui-datepicker-trigger")
                .css({ 'cursor': 'pointer', 'position': 'relative', 'left': '-18px', 'top': '3px' });
            $(el).attr("title", "Формат ввода: 'дд.мм.гггг'");                
        }
		
		this.Destroy = function() {
			$("#gview_" + vdiv + " #gs_sto_inv_date").datepicker( "destroy" ).unbind();
			$("#gview_" + vdiv + " #gs_sto_retire_date").datepicker( "destroy" ).unbind();
			gritab.GridDestroy(vdiv);
			area.empty();
		};
		this.Resize = function() {
			gritab.setGridWidth( area.innerWidth() - 2 );
			gritab.setGridHeight( area.innerHeight() - 77 );
		};

		this.Refresh = function() { gritab.trigger("reloadGrid"); };
		
	};  // End of create function definition


	function CrossStockProxy() {
		var oTab, area;
		var active = false;
		
		this.Open = function( area_id ) {
			if( active  ) return;
			area = area_id;
			$('#'+area+'Title').show();
			CreatePannel();
//			oTab = new CrossStock( area_id, this ); 
			$(window).bind( 'resize', oTab.Resize );
			active = true;
		};
		this.Close = function() { 
			if( !active  ) return;
			$(window).unbind( 'resize', oTab.Resize );
			RemovePannel();
//			oTab.Destroy();
			$('#'+area+'Title').hide();
			active = false;
		};
		this.Resize = function() { oTab.Resize(); };
		
		function CreatePannel() {
			var l_area = area+'_left';
			var r_area = area+'_right';
			$('#'+area).append(
				'<div id="'+l_area+'" style="position:absolute;top:0;left:0;width:200px;bottom:3px;" class="ui-widget-content ui-corner-all"></div>'+
				'<div id="'+r_area+'" style="position:absolute;top:0;left:204px;right:0;bottom:0;"></div>'
			);
			$('#'+l_area).dynatree({
				clickFolderMode: 1,
				initAjax: {	url: "index.php", data: { q: "unitree/gettree" } },
				onClick: function(node, event) {
					if( node.hasChildren() && node.getEventTargetType(event) == "title"){ node.toggleExpand(); }
					return true;
				},			
				onActivate: function(node) { leaf_id = node.data.key; oTab.Refresh(); },
				onPostInit: function( isReload ) {
					if( !isReload ) {
						var node = $('#'+l_area).dynatree("getActiveNode");
						if( node ) node.deactivate();
					}
				}
			});
			
			oTab = new CrossStock( r_area, this.caller ); 			
		}
		
		function RemovePannel() {
			oTab.Destroy();
			$('#'+area).empty();
		}
	}
	
	app.CrossStock = new CrossStockProxy();
	
    // ---------------------------------------------------------------------------
})(jQuery);
